/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sysprojectmg.proyecto.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import sysprojectmg.conexion.ConectaDB;
import sysprojectmg.horasproduccion.be.BeanMiembro;
import sysprojectmg.proyecto.be.BeanProyecto;
import sysprojectmg.proyecto.be.BeanTipoProyecto;

/**
 *
 * @author Metis Gaia 2010-02
 */
public class ProyectoDAO {

    public ArrayList<BeanProyecto> obtenerLista(int idUsuario, int idRol, int codigoSemana) throws SQLException {
        ArrayList<BeanProyecto> listaProyectos = new ArrayList<BeanProyecto>();
        ArrayList<BeanMiembro> listaProductores = new ArrayList<BeanMiembro>();

        int idProy = 0;
        BeanProyecto beanProy = null;
        BeanMiembro beanProductor = null;

        CallableStatement call = null;
        Connection conn = null;
        try {
            conn = new ConectaDB().getAcceso();
            String store = "{call SP_OBTENER_LISTA_USUARIOXROLXPROYECTO(?, ?, ?)}";
            call = conn.prepareCall(store);
            call.setInt(1, idUsuario);
            call.setInt(2, idRol);
            call.setInt(3, codigoSemana);

            ResultSet rs = call.executeQuery();


            //armar la cadena de fechas para luego guardarlo en el bean
            while (rs.next()) {
                beanProy = new BeanProyecto(rs.getInt("proyecto.idproyecto"),
                        rs.getString("proyecto.nombre"),
                        rs.getInt("proyecto.coordinador"),
                        rs.getString("usuario.nombre_apellido"),
                        rs.getDate("proyecto.fecha_inicio"),
                        rs.getDate("proyecto.fecha_fin"),
                        rs.getInt("proyecto.tipo"),
                        rs.getDate("semana_anio.desde"),
                        rs.getDate("semana_anio.hasta"));

                //hacer otra consulta para la lista de miembros de cada proyecto
                String store2 = "SELECT USUARIO.idUsuario, USUARIO.nombre_apellido, usuarioxrolxproyecto.horas "
                        + "FROM USUARIO, usuarioxrolxproyecto "
                        + "WHERE USUARIO.idUsuario=usuarioxrolxproyecto.idusuario "
                        + "AND usuarioxrolxproyecto.idproyecto=? "
                        + "AND usuarioxrolxproyecto.idsemana=? "
                        + "AND usuarioxrolxproyecto.estado=1";

                call = conn.prepareCall(store2);
                call.setInt(1, beanProy.getIdProyecto());
                call.setInt(2, codigoSemana);

                ResultSet rs2 = call.executeQuery();

                while (rs2.next()) {
                    beanProductor = new BeanMiembro(rs2.getInt("idUsuario"),
                            rs2.getString("nombre_apellido"),
                            rs2.getInt("horas"));
                    listaProductores.add(beanProductor);
                }
                beanProy.setListaProductores(listaProductores);
                listaProyectos.add(beanProy);
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (call != null) {
                call.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
        return listaProyectos;
    }

    public BeanProyecto obtenerProyectoPorId(int idProyecto) throws SQLException {
        BeanProyecto bean = null;
        CallableStatement call = null;
        Connection conn = null;
        try {
            conn = new ConectaDB().getAcceso();
            String store = "SELECT * "
                    + "FROM proyecto "
                    + "WHERE proyecto.idProyecto = ? ";


            call = conn.prepareCall(store);
            call.setInt(1, idProyecto);
            ResultSet rs = call.executeQuery();

            if (rs.next()) {
                bean = new BeanProyecto(rs.getInt("idproyecto"),
                        rs.getString("nombre"),
                        rs.getInt("coordinador"),
                        rs.getString("nombre_apellido"),
                        rs.getDate("fecha_inicio"),
                        rs.getDate("fecha_fin"),
                        rs.getInt("tipo"),
                        rs.getDate("desde"),
                        rs.getDate("hasta"));
            }
        } catch (Exception ex) {
            Logger.getLogger(ProyectoDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (call != null) {
                call.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
        return bean;
    }

    public ArrayList<BeanProyecto> obtenerTodosProyectos(int estado) throws SQLException {
        ArrayList<BeanProyecto> lista = new ArrayList<BeanProyecto>();
        BeanProyecto bean = null;
        CallableStatement call = null;
        Connection conn = null;
        try {
            conn = new ConectaDB().getAcceso();
            String store = "SELECT proyecto.idproyecto, proyecto.nombre, proyecto.coordinador, "
                    + "USUARIO.nombre_apellido, "
                    + "proyecto.fecha_inicio, proyecto.fecha_fin, proyecto.tipo "
                    + "FROM proyecto, USUARIO "
                    + "WHERE proyecto.estado = ? AND "
                    + "proyecto.coordinador=USUARIO.idUsuario "
                    + "ORDER BY 2";
            call = conn.prepareCall(store);
            call.setInt(1, estado);

            ResultSet rs = call.executeQuery();
            while (rs.next()) {
                bean = new BeanProyecto(rs.getInt("idproyecto"),
                        rs.getString("nombre"),
                        rs.getInt("coordinador"),
                        rs.getString("nombre_apellido"),
                        rs.getDate("fecha_inicio"),
                        rs.getDate("fecha_fin"),
                        rs.getInt("tipo"),
                        Date.valueOf("2011-01-01"),
                        Date.valueOf("2011-01-01"));
//                        rs.getDate("desde"),
//                        rs.getDate("hasta"));

                lista.add(bean);
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (call != null) {
                call.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
        return lista;
    }

    public boolean agregarProyecto(BeanProyecto beanProyecto) throws SQLException {
        boolean actualizacionCompleta = false;
        int rs = 0;
        int contador = 0;
        CallableStatement call = null;
        Connection conn = null;
        try {
            conn = new ConectaDB().getAcceso();
            String store = "INSERT INTO proyecto "
                    + "(`nombre`, `coordinador`, `fecha_inicio`, `fecha_fin`, `tipo`, `estado`, `cantidad_semanas`) "
                    + "VALUES "
                    + "(?, ?, ?, ?, ?, ?, ?) ";

//            String store = "UPDATE proyecto "
//                    + "SET horas = ? "
//                    + "WHERE usuarioxrolxproyecto.idusuario = ? "
//                    + "AND usuarioxrolxproyecto.idproyecto = ? "
//                    + "AND usuarioxrolxproyecto.idsemana = ? ";
            call = conn.prepareCall(store);
            call.setString(1, beanProyecto.getNombreProyecto());
            call.setInt(2, beanProyecto.getCoordinador());
            call.setDate(3, (Date) beanProyecto.getFechaInicio());
            call.setDate(4, (Date) beanProyecto.getFechaFin());
            call.setInt(5, beanProyecto.getTipo());
            call.setInt(6, 1);
            call.setInt(7, beanProyecto.getCantSemanas());

            rs = call.executeUpdate();
            if (rs != 0) {
                contador++;
            }

        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (call != null) {
                call.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
        return actualizacionCompleta;
    }

    public BeanProyecto obtenerDatosProyecto(int idProyecto, int idUsuario) {
        BeanProyecto bean = new BeanProyecto();



        return bean;
    }

    public ArrayList<BeanTipoProyecto> obtenerTiposProyectos(int estado) throws SQLException {
        ArrayList<BeanTipoProyecto> listaTiposProyecto = new ArrayList<BeanTipoProyecto>();
        CallableStatement call = null;
        Connection conn = null;

        try {
            conn = new ConectaDB().getAcceso();
            String store = "{call SP_LISTAR_TIPO_PROYECTO(?)}";
            call = conn.prepareCall(store);
            call.setInt(1, estado);

            ResultSet rs = call.executeQuery();

            while (rs.next()) {
                listaTiposProyecto.add(new BeanTipoProyecto(rs.getInt("idtipo_proyecto"),
                        rs.getString("tipo"),
                        rs.getString("descripcion"),
                        rs.getInt("estado")));
            }

        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (call != null) {
                call.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
        return listaTiposProyecto;
    }

    public ArrayList<BeanProyecto> listarProyectos(String filtroNombre, int filtroTipo, int estado) throws SQLException {
        ArrayList<BeanProyecto> listaProyectos = new ArrayList<BeanProyecto>();
        CallableStatement call = null;
        Connection conn = null;

        try {
            conn = new ConectaDB().getAcceso();
            String store = "{call SP_LISTAR_PROYECTOS(?,?,?)}";
            call = conn.prepareCall(store);
            call.setString(1, filtroNombre);
            call.setInt(2, filtroTipo);
            call.setInt(3, estado);

            ResultSet rs = call.executeQuery();

            while (rs.next()) {
                listaProyectos.add(new BeanProyecto(rs.getInt("idproyecto"),
                        rs.getString("nombre"),
                        rs.getInt("coordinador"),
                        rs.getDate("fecha_inicio"),
                        rs.getInt("tipo")));
            }

        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (call != null) {
                call.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
        return listaProyectos;
    }
}
